package com.demo.core.service.base;

import java.util.List;

import com.demo.core.model.Site;
import com.demo.security.annotation.audit.PostAudit;
import com.demo.security.annotation.audit.PreAudit;


/**
 * 站点服务接口
 * 站点服务分为：
 * 	1.站点基本服务
 *	2.站点功能服务
 *	3.站点组授权服务
 * 
 * @author ryuu.kk
 */
public interface SiteService {
	
	/**
	 * 站点是否存在
	 * @param id 站点ID
	 * @return 是否存在
	 */
	boolean exists(Long id);
	
	/**
	 * 保存站点模型信息
	 * @param site 站点模型
	 * @return 站点主键ID
	 */
	@PreAudit(code = "SiteService.save")
	@PostAudit(code = "SiteService.save", auditTarget = "com.demo.core.model.Site")
	Long save(Site site);
	
	/**
	 * 删除站点模型
	 * @param siteId 站点外键ID
	 * @return 操作数
	 */
	@PreAudit(code = "SiteService.delete")
	@PostAudit(code = "SiteService.delete", auditTarget = "com.demo.core.model.Site")
	int delete(Long siteId);
	
	/**
	 * 更新站点模型的基本信息
	 * NAME、SHORT_NAME、LANGUAGE、CODE、DOMAIN、
	 * RES_PATH、RES_DOMAIN、BASE_DOMAIN、
	 * DOMAIN_ALIAS、SUFFIX、COOKIE_KEY、NOTES 	
	 * @param siteId 站点ID
	 * @param site 站点模型
	 */
	@PreAudit(code = "SiteService.update")
	@PostAudit(code = "SiteService.update", auditTarget = "com.demo.core.model.Site")	
	void update(Long siteId, Site site);
	
	/**
	 * 更新站点状态
	 * @param siteId 站点ID
	 * @param status 站点状态
	 * @return 操作数
	 */
	@PreAudit(code = "SiteService.updateStatus")
	@PostAudit(code = "SiteService.updateStatus", auditTarget = "com.demo.core.model.Site")
	int updateStatus(Long siteId, String status);
	
	/**
	 * 更新站点所有者信息
	 * 站点所有者信息为：
	 * OWNER_NAME、OWNER_IDENTITY、
	 * OWNER_EMAIL、OWNER_TEL、
	 * OWNER_MOBILE、COMPANY、
	 * COPYRIGHT、RECORD_CODE
	 * @param siteId 站点ID
	 * @param site 站点模型
	 * @return 操作数
	 */
	@PreAudit(code = "SiteService.updateOwner")
	@PostAudit(code = "SiteService.updateOwner", auditTarget = "com.demo.core.model.Site")
	int updateOwner(Long siteId, Site site);
	
	/**
	 * 设置站点后缀SUFFIX
	 * @param siteId 站点ID
	 * @param suffix 站点URL后缀
	 */
	@PreAudit(code = "SiteService.updateSuffix")
	@PostAudit(code = "SiteService.updateSuffix", auditTarget = "com.demo.core.model.Site")
	int updateSuffix(Long siteId, String suffix);
	
	/**
	 * 关闭站点
	 * 站点关闭后，后台仍可以访问。
	 * @param siteId 站点ID
	 */
	@PreAudit(code = "SiteService.close")
	@PostAudit(code = "SiteService.close", auditTarget = "com.demo.core.model.Site")
	void close(Long siteId);
	
	/**
	 * 关闭站点
	 * 站点关闭后，后台仍可以访问。
	 * @param siteId 站点ID
	 * @param defaultUrl 关闭后的访问的默认跳转地址
	 */
	@PreAudit(code = "SiteService.close")
	@PostAudit(code = "SiteService.close", auditTarget = "com.demo.core.model.Site")
	void close(Long siteId, String defaultUrl);
	
	/**
	 * 开放站点
	 * @param siteId 站点ID
	 */
	@PreAudit(code = "SiteService.open")
	@PostAudit(code = "SiteService.open", auditTarget = "com.demo.core.model.Site")
	void open(Long siteId);
	
	/**
	 * 查找站点信息
	 * @param siteId 站点ID
	 * @return 站点模型对象
	 */
	//@PreAudit(code = "SiteService.find")
	//@PostAudit(code = "SiteService.find", auditTarget = "com.demo.core.model.Site")
	Site find(Long siteId);
	
	/**
	 * 根据站点名称查询站点信息
	 * @param domain 站点名称
	 * @return 站点信息
	 */
	//@PreAudit(code = "SiteService.findByDomain")
	//@PostAudit(code = "SiteService.findByDomain", auditTarget = "com.demo.core.model.Site")
	Site findByDomain(String domain);
	
	/**
	 * 根据站点类型查找站点列表
	 * @param siteGroupId 站点类型ID
	 * @return 站点模型列表
	 */
	//@PreAudit(code = "SiteService.findAll")
	//@PostAudit(code = "SiteService.findAll", auditTarget = "com.demo.core.model.Site")
	List<Site> findAll(Long siteGroupId);
	
	/**
	 * 取得系统内所有站点
	 * @return 站点模型列表
	 */
	//@PreAudit(code = "SiteService.findAll")
	//@PostAudit(code = "SiteService.findAll", auditTarget = "com.demo.core.model.Site")
	List<Site> findAll();
}
